• 你的社群網站最近是不是常被「MCP」這個詞洗版?以前以為「技術」是工程師的事,但 MCP 卻是少數跟你我關係密切的「技術」,因為 MCP 的功能是強化 AI,而你我不是每天都用 AI 嗎?
  • 2 個月前我對它略懂,但現在我每天跟它相處十幾小時,還寫了個 管理 MCP 的 MCP,本文整理了 2 個月的研究和實作,如果你對 MCP 似懂非懂,讓我們細說從頭。
  • 有人說:「我看不出 MCP 有什麼好,不就跟 API 一樣嗎?」,2 個月前的我也這麼想,但現在全改觀了。
  • 理解篇

    • 看圖說故事,什麼是 MCP ?

      • 軟體、網站的架構就像餐廳,而 MCP 就是美食街,裡面有很多餐廳。
      • 電腦就像餐廳,前端是你看到的裝潢、菜單,後端是廚房,每道菜都有自己的邏輯,但你不會跑去廚房點餐,服務員就是 API,負責把你的需求傳給廚房後,再把菜從廚房送來給你。
        • 電腦就像餐廳,前端是你看到的裝潢、菜單,後端是廚房,每道菜都有自己的邏輯,但你不會跑去廚房點餐,服務員就是 API,負責把你的需求傳給廚房後,再把菜從廚房送來給你。 電腦一次要做很多事,就像美食街什麼餐廳都有,但每家的點餐方式(API)都不同,你要會講各種語言才能讓日本料理配法國濃湯餐後上義大利咖啡,這實在很麻煩。電腦一次要做很多事,就像美食街什麼餐廳都有,但每家的點餐方式(API)都不同,你要會講各種語言才能讓日本料理配法國濃湯餐後上義大利咖啡,這實在很麻煩。 美食街老闆發現問題,為了複雜點餐買了機器人(AI),把複雜點餐要求說給它聽,它會很勤快的幫你完成點餐。啊!還不行,因為每家餐廳的點餐法都不同,他們聽不懂 AI 說什麼!美食街老闆發現問題,為了複雜點餐買了機器人(AI),把複雜點餐要求說給它聽,它會很勤快的幫你完成點餐。啊!還不行,因為每家餐廳的點餐法都不同,他們聽不懂 AI 說什麼! 此時老闆制定了 MCP ,它規定格式,每家餐廳用相同的結構溝通,AI 連上日餐 MCP ,就能幫你點日本料理,連法餐 MCP ,就能點法國濃湯,AI 現在能力變強了,而且只要有源源不斷的 MCP 被開發出來,它就無所不能!此時老闆制定了 MCP ,它規定格式,每家餐廳用相同的結構溝通,AI 連上日餐 MCP ,就能幫你點日本料理,連法餐 MCP ,就能點法國濃湯,AI 現在能力變強了,而且只要有源源不斷的 MCP 被開發出來,它就無所不能!
      • 看圖說故事完畢,你應該略懂 MCP 角色?但比喻只是協助理解真實知識,真實知識才能用。
      • 現在帶着前面的初步理解,開始真實說明。
      • MCP 的全名是 MCP Server,它是由 Anthoropic,就是 Claude 的母公司提出的標準,雖然現在很多 AI 公司都支持,但接下來都用 Claude Code 來舉例,因為它是支援最全面的軟體。
      • 其實我們可以說 MCP 是「AI 用的 App」,它是一組程式,一邊連到某個軟體/服務,另一邊連 AI,架構是這樣:
        • AI ⇔ MCP Server ⇔ 本地/雲端服務
        • AI ⇔ MCP Server ⇔ 本地/雲端服務
      • Plaintext
      • 當然不止當橋樑串接兩邊,它更是 AI 的好朋友,會告訴 AI 如何用這服務,用錯了會告訴 AI 錯在哪,有了它,AI 可以立刻取用工具,不用再自己去研究了。
      • AI 有了 MCP 太好了,比起其他的方法,這太簡易了。
      • 但終究是「技術」,對 AI 簡單,對我可沒這麼簡單,有一大堆觀念超難懂,沒關係,讓我們依照分類來理解它。
    • 依照 MCP Server 提供服務位置分 2 類

      • 重複一次,「MCP 是 AI 用的 App」。
      • 跟我們人類用的 App 一樣:
        • 本機軟體,比如 Microsoft Word,打開就能用;
        • 雲端軟體,比如 Google Docs,要先聯網、打開瀏覽器、輸入 Google Docs 的網址。
      • MCP 這個 AI 的 App 也是這樣,分本地和雲端兩種:
        • 本機 MCP(STDIO)AI ⇔ 本機 MCP Server ⇔ 本地/雲端服務,AI 只要連接本機 App,但它也能抓雲端資料,只是 AI 不負責聯網。
        • 雲端 MCP(HTTP)AI ⇔ 雲端 MCP Server ⇔ 雲端服務,AI 要連雲端 App,如果人類用,就是看到雲端就要開瀏覽器。
      • 常有誤解「Google Docs 是雲端服務,所以 Google Docs MCP 一定也是雲端的」錯了,這就是 MCP 令人迷糊之處,實際上,MCP 裝在哪裡跟最終服務是否雲端完全無關!
        • 假如有個 Google Docs MCP 是本機 MCP,AI 透過安裝在本地 MCP 串到雲端 Docs,對 AI 來說,它沒有上網啊!它只跟本機軟體說話,雖然這軟體會去雲端幫它拿資料來,但它就是個本機 MCP。
          • 例如這個 Google Sheets MCP,它安裝在本地,AI 只要跟它溝通,但它會幫 AI 把雲端的試算表內容拿回來。
        • 另一個例子,自動化軟體 n8n 提供「MCP Server Trigger」節點,可以自製 MCP,讓 AI 去雲端用你的工作流,它有個網址: https://{你的網址}/mcp/{mcp-server-name},對 AI 來說,它要驅動 n8n 工作流,就要上網連到 MCP 去,就像打開瀏覽器一樣,這就是雲端 MCP。
      • 開發 MCP 的人要提供 HTTP MCP 讓人用,他就要準備一台伺服器,要花錢,所以大部分 MCP 是本機版,我不花錢買伺服器服務你!
    • 依照 MCP Server 的使用範圍分 3 類

      • 這段很容易搞混,重點是瞭解使用情境。
        • 個人(User)MCP :可以叫做「全域 MCP」,就是在你的電腦任何位置都能用。
        • 專案(Project)MCP :只在設定它的專案中可用,跳出去就看不到了,它把設定項寫在專案裡,如果跟別人分享檔案夾,會連設定一起分享出去,通常是因為它是本專案必要的零件。
        • 專案/本地(Local)MCP :也只在專案中能用,不同的是,它的設定跟「個人 MCP」一樣放在 Claude Code 總設定裡,就算你把專案檔案夾跟別人分享,別人也看不到,例如我把密碼寫在裡面,這可不能讓人看到!
      • 專案級 MCP 權限高於全域,如果專案內 Google Docs MCP 連到客戶帳號,全域的連到自己的帳號,那專案內打開時就不會連到自己家。
      • 你可以想想如何組合:
        • 比如你是一人公司,只做自己的工作,AI 的服務對象是你本人,那全域 MCP 就夠了。
        • 但如果你幫別人開發軟體、對自己和公司用不同帳號…,那就要分別設定專案/本地的 MCP 了。
    • 誰支援哪種 MCP Server

      • 不是 MCP 都一樣,每家都有不同的設定
      • 在本文寫的時候是這樣的:
        • ChatGPT, Gemini, Claude 等網頁聊天機器人,全不支援 MCP。
        • Claude Desktop 支援本機 MCP,不支援雲端 MCP,應該是安全因素。
        • Claude Code 和 Roo Code 支援全域和專案 MCP。
        • Gemini CLI 支援全域,但不支援專案 MCP。
        • OpenAI Codex 我沒測過,如果你知道可以告訴我。
      • 很繁雜吧?所以只能用大王– Claude Code 說明,它是全世界支持最全面的 AI 工具,但你瞭解這些分類,腦中有個地圖,換什麼都容易。
        • 這是個範例,AI 變得很快,後續不會維護,要查詢最新現狀還是要上網!

  • 安裝篇

    • 這裡設定各種東西,包括 AI 要呼叫哪裡的 MCP、用什麼方式呼叫、誰會呈現誰被遮蔽…。
        • Claude Code 只能用文字指令安裝,不過你可以用我開發的 SyncMCP(歡迎使用) 用 RooCode 的圖形界面安裝後同步到 Claude Code 即可。
        • 忍受我用指令說明,凡事當然要符合大王的規範啊。
    • 你不用煩惱哪個是雲端哪個是本機,通常提供的頁面都有說明,這裡的目的是讓你打開 GitHub 上的 MCP 專案時,看得懂他在寫什麼。
    • 安裝雲端 MCP

      • 雲端 MCP 就是有一個 App 在雲端,叫 AI 開瀏覽器使用它,所以雲端安裝設定時要給它「網址」。
      • Bash
          • 有的資料教你用「SSE」連接雲端,它已經廢棄了,現在雲端都用 http,還有些舊 MCP 用 SSE
          • 在 AI 世界,所謂「舊的」可能就是 2 週前…。
    • 安裝本地 MCP

      • 本地 MCP 就是有一個 App 裝在電腦中某處,叫 AI 使用它,所以本地安裝設定時告訴它這 App 在哪裏。
        • claude mcp add —transport stdio n8n-mcp
          • —scope user # 注意看這行,稍候說明
          • —env MCP_MODE=stdio
          • —env LOG_LEVEL=error
          • —env DISABLE_CONSOLE_OUTPUT=true
          • —env N8N_API_URL=https://client-n8n.example.com/api/v1
          • —env N8N_API_KEY=client-api-key
          • — npx -y n8n-mcp@2.12.2 # 這行是告訴 AI 用 npx 方式去使用 n8n-mcp,稍候說明
        • claude mcp add —transport stdio n8n-mcp
          • —scope user # 注意看這行,稍候說明
          • —env MCP_MODE=stdio
          • —env LOG_LEVEL=error
          • —env DISABLE_CONSOLE_OUTPUT=true
          • —env N8N_API_URL=https://client-n8n.example.com/api/v1
          • —env N8N_API_KEY=client-api-key
          • — npx -y n8n-mcp@2.12.2 # 這行是告訴 AI 用 npx 方式去使用 n8n-mcp,稍候說明
      • Bash
    • 本地 MCP 常用安裝方式

      • 本地安裝當然要有個檔案夾咯?但如果你安裝會發現「我都沒建檔案夾,它到底裝在哪裡?」,這裏說明。
      • Command | 老方法

        • 就開檔案夾把相關檔案下載下來,可能 MCP 作者不熟悉新的寫法,或是他不是用 JS/Python 開發,就要整包下載下來。
        • 比如有個 MCP 為了高效能,用 Go 這種超快編譯語言寫,那就要下載到電腦裡你手動建立的檔案夾,command 指向檔案夾。
          • {
            • “mcpServers”: {
              • “my-go-mcp”: {
                • “command”: “/usr/local/bin/my-go-mcp”, # 這行告訴 AI 執行檔放哪
                • “args”: [“—port”, “8080”],
                • “env”: {
                  • “CONFIG_PATH”: “/etc/my-go-mcp/config.yaml”
                • }
              • }
            • }
          • }
          • {
            • “mcpServers”: {
              • “my-go-mcp”: {
                • “command”: “/usr/local/bin/my-go-mcp”, # 這行告訴 AI 執行檔放哪
                • “args”: [“—port”, “8080”],
                • “env”: {
                  • “CONFIG_PATH”: “/etc/my-go-mcp/config.yaml”
                • }
              • }
            • }
          • }
        • Bash
        • 比起雲端就是給個網址,本地安裝的玩法很多,這種細節你可以問 AI,比如:
          • 直接把執行檔放在某個檔案夾中
          • 把原始碼放在某個檔案夾中
          • 把整個服務用 Docker 安裝在本地
        • 這裡只要建立觀念,談細節沒人比得過 AI,我就不說了,請問 AI。
      • NPX | Node 的便利安裝法

        • 如果 MCP 用 Node (JavaScript) 開發,可以用 npx,它在你需要時才把程式碼下載下來,放在記憶體中,不用了就清除,下次要用再下載,所以只要一條指令,不用開檔案夾也行。
          • {
            • “mcpServers”: {
              • “node-server”: {
                • “command”: “npx”, # 告訴 AI 用 NPX 方式使用
                • “args”: [“-y”, “package-name”]
              • }
            • }
          • }
          • {
            • “mcpServers”: {
              • “node-server”: {
                • “command”: “npx”, # 告訴 AI 用 NPX 方式使用
                • “args”: [“-y”, “package-name”]
              • }
            • }
          • }
        • Bash
      • UVX | Python 的便利安裝法

        • JavaScript 陣營有 NPX,在 Python 陣營也有 UVX,用途一樣,不用你開檔案夾安裝,自動下載、自動清除。
          • {
            • “mcpServers”: {
              • “python-server”: {
                • “command”: “uvx”, # 告訴 AI 用 UVX 方式使用
                • “args”: [“package-name”]
              • }
            • }
          • }
          • {
            • “mcpServers”: {
              • “python-server”: {
                • “command”: “uvx”, # 告訴 AI 用 UVX 方式使用
                • “args”: [“package-name”]
              • }
            • }
          • }
        • Bash
  • 深度理解篇

    • 原本我大多數 MCP 都設為「全域可用」(大錯特錯!),就是不管開哪個專案,都獲取相同的 MCP 設定。
      • 我的想法是:比如 Context7 可以讓 AI 可以查到程式碼最新版參考,怎麼會因為專案不同呢?設定全域就好了。

    • 那到底專案 MCP 是幹嘛用的?
    • 直到接案時,因為複雜的 n8n 專案跨環境遷移很容易出問題,想說連到客戶家的 n8n,直接叫 AI 調整他的工作流。
    • 但全域 n8n-MCP 是連到我自己的 n8n,就沒辦法讓 AI 調整客戶的 n8n 了。
    • 原來專案級就在此刻要用啊!有趣的是:
      • 同一個 MCP,在不同專案可以設定不同的帳號、版本…。
      • 專案級優先權高於全域,所以設定了專案級時,就覆蓋(遮蔽)了全域內容。
    • 指令安裝後做了些什麼?

      • 這裏是 Claude Code 的官網範例,雖然有中文,但我看不懂它在寫什麼,只好自己研究。
      • 指令改一點,只要 Scope 不同,就變不同設定:
      • Bash
      • 問題是下指令後 Claude Code 到底改了什麼呢?如果你知道,當 AI 設不好時,你可以糾正它。
          • Claude Code 理論上會自己設定,但它是在搞不清自己的設定項在哪,還搞不懂專案和全域分別,常常一直改個半小時才搞定,如果你懂,省掉很多時間(= 金錢)。
          • 別家…,算了吧,連自己設定都不會。
      • 其實,不管你安裝到哪裏,它只是把一樣的內容寫入某個設定檔,內容像這樣:
      • Bash
      • 但不同的 Scope 設定,會把它插入不同位置:
        • 安裝到全域(user) :加在 ~/.claude.json/mcpServers 下。
        • 安裝到本地(local) :加在 ~/.claude.json/projects[*].mcpServers 下,跟全域同一個檔案,只是放在不同章節,因為不放在專案檔案夾,也不會上傳到 GitHub。
        • 安裝到專案(project) :加在 .mcp.json 中,就是專案根目錄,跟前兩者位置不同,你用 GitHub 同步到雲端時,這設定也被保存到雲端,別人複製時會把設定一起下載。
    • 不用指令直接改設定檔

      • 既然指令不同產生一樣的內容,那直接去改 json 檔不就好了?
      • 沒錯,直接修檔案不會有任何問題,可能比用指令還方便,如果你寫一個軟體來管理,就可以用改 json 內容的方式快速設定。
        • 有時候 AI 教你新增 .clauderc 檔寫入設定內容,雖然實測仍有效,但這是「老」方法,已廢棄,未來可能不支援。

    • 細節設定

      • 安全機制及如何關閉

        • 如果你的專案設有專案級的 MCP,啓動時 Claude Code 會問你:
          • This project wants to use MCP server: n8n-mcp

          • Command: npx -y n8n-mcp@2.12.2

          • Environment variables:

          • N8N_API_URL=https://client-n8n.example.com/api/v1

          • N8N_API_KEY=***

          • [Allow Once] [Always Allow] [Deny]

        • 因為 MCP 名稱一樣,你沒注意會以為連到自己的網站(因為不是你用而是 AI 用),連錯位置會把機密發給別人,所以它做了這個安全機制,你選 Always Allow,就不會再跳出來。
        • 但如果你想手動設置「別再問我了」,就去專案中的 .claude/settings.local.json 設定
          • {
            • “enableAllProjectMcpServers”: true
          • }
          • {
            • “enableAllProjectMcpServers”: true
          • }
        • Bash
        • 就會自動批准所有的專案級 MCP。
      • 黑/白名單

        • 前面 enableAllProjectMcpServers 是全開,如果只要開/關部分呢?
          • {
            • { # 只同意部分
              • “enabledMcpjsonServers”: [“n8n-mcp”, “github”]
            • },
            • { # 只不同意部分
              • “disabledMcpjsonServers”: [“risky-server”]
            • }
          • }
          • {
            • { # 只同意部分
              • “enabledMcpjsonServers”: [“n8n-mcp”, “github”]
            • },
            • { # 只不同意部分
              • “disabledMcpjsonServers”: [“risky-server”]
            • }
          • }
        • Bash
        • 這就是「正/負面表列」功能。
          • 請注意,這設定管不到全域 MCP,只能管到專案級 MCP,所以無法用它把全域 MCP 關閉。

      • 組合使用

        • 全部加在一起,你可以用全部同意加上部分黑名單,就很容易控制專案中有哪些 MCP。
        • 也可以用白名單來開啓/關閉某些 MCP。
  • 管理篇,MCP 佈局與設計哲學

    • 我很疑惑,為什麼沒有在專案裡關閉部分全域 MCP 的功能呢?設計的很爛啊!
    • 不是哦。
    • 加法哲學

      • 因為 Claude 的設計理念是「加法」而不是「減法」:
        • 全域設定很多,到專案裡關閉 :這就像去露營居然帶了微波爐,太重又丟掉,很不合理。
        • 全域設定很少,專案再加 :如果營區已經有微波爐,那帶菜刀、砧板就好了,合理。
      • 所以 Claude 希望你這樣用:
        • 全域配置 = 基礎工具集
          • 預期用途 :所有專案都需要的通用工具
          • 範例 :sequential-thinking, filesystem
        • 專案配置 = 額外工具
          • 預期用途 :專案特定的 MCP servers
          • 範例 :專案特定的 API、資料庫連接
        • 全域(1-3 個通用 MCP)+ 專案(2-5 個專案特定 MCP)= 每個專案 3-8 個 MCP servers
        • 全域(1-3 個通用 MCP)+ 專案(2-5 個專案特定 MCP)= 每個專案 3-8 個 MCP servers
      • Plaintext
    • Context Window 考量,就是 $$ 啦

      • 每個 MCP server 都會消耗 context window:
        • 小型 MCP:5,000-15,000 tokens
        • 中型 MCP:15,000-50,000 tokens
        • 大型 MCP(如 google_workspace):50,000-85,000 tokens
      • 範例
        • 全域:
          • sequential-thinking: 10,000 tokens
          • github: 20,000 tokens
          • n8n-mcp: 30,000 tokens = 60,000 tokens
        • 如果專案只需要 github,仍然會浪費 40,000 tokens 在不需要的 MCP 上!
      • Token 要花錢買的,為了省錢,千萬要做好佈局!
    • 常改專案設定好麻煩啊

      • 其實可以用簡單的腳本解決這個問題,AI 很會寫。
        • 記錄設定檔 :把常用 mcp 設定 json 都寫在同一個檔案裡,就是 snippets,設定不同專案時,把片段複製到合適位置就好。
        • 為什麼不要用時再安裝,反正指令很簡單啊?因為很多 mcp 要設登入帳密、API Key,那不是每次安裝都要重設嗎?想到就累啊!

        • 複製設定檔 :Claude Code 把所有用到的專案都記錄在 ~/.claude.json/projects/{project_path},很容易找到
        • 決定統一管理或是分散管理
          • 統一管理:複製到 local mcp server:
            • 腳本偵測 ~/.claude.json/projects/{project_path}/mcpServers 是否有這筆設定
            • 如果沒有,插入程式碼
          • 分散管理:複製到 project mcp server:
            • 先偵測 .mcp.json 是否存在,不存在就新增
            • 如果存在,查看設定
            • 如果內部沒設定,插入程式碼
      • 這個設定叫 AI 做應該很快的。
  • 結論

    • 有 AI 你不需要記住很多指令,但是還是要瞭解這些指令代表什麼意思,因為,就算 MCP 是 Anthoropic 發明的,但它自家的 Claude 都搞不定,你看到它在做什麼時,你知道某些是胡扯,有些根本做錯了,可以及時回頭。
    • 然後,因為有 AI,其實你可以叫它把你常用的功能做成一個 MCP,那就很快了。這是為什麼你需要略懂什麼是 MCP 的原因。
    • 如果你會用 n8n,會突然理解 MCP Server Trigger 和 MCP Client Tool 的用途吧?原本是很複雜的觀念。
    • 恭喜你,現在可以開始 AI First 的生活了!

📚 相關文章